package com.seegw.shaphar;

import com.javaweb.admin.entity.*;
import com.javaweb.admin.entity.kdltrans.KdlTransDto;
import com.javaweb.admin.entity.kdltrans.KdlTransVendor;
import com.javaweb.admin.entity.kdltrans.KdlTransVendorOper;
import com.javaweb.admin.entity.kdltrans.KdlTransVendorTruck;
import com.javaweb.admin.query.*;
import com.javaweb.common.common.BaseQuery;
import com.javaweb.common.utils.JsonResult;

import java.util.List;

public interface IKDLService {
    /**
     * 下发客户主数据 -> 康德乐
     * @param id
     * @return
     */
    JsonResult submitCustomer(Integer id);

    /**
     * 同步NC客户数据 -> 物流系统
     * @return
     */
    JsonResult syncCustomer();

    /**
     * 下发供应商主数据 -> 康德乐
     * @param id
     * @return
     */
    JsonResult submitSupplier(Integer id);
    /**
     * 同步NC供应商数据 -> 物流系统
     * @return
     */
    JsonResult syncSupplier();

    /**
     * 下发物料主数据 -> 康德乐
     * @param id
     * @return
     */
    JsonResult submitMaterial(Integer id);
    /**
     * 同步NC物料数据 -> 物流系统
     * @return
     */
    JsonResult syncMaterial();

    JsonResult syncMasterDataResult(KdlMaraQuery query);
    String getMasterDataMaxSyncTime(String mastertype);

    JsonResult syncCoaFile();

    JsonResult getMaraList(BaseQuery query);

    /**
     * 同步药检报告
     * @return
     */
    JsonResult getCoaList(BaseQuery query);

    /**
     * 同步康德乐采购收货
     * @return
     */
    JsonResult syncPurchasewe(KdlPurchaseweQuery query);
    String getPurchaseweMaxSyncTime();

    /**
     * 同步康德乐即时库存
     * @return
     */
    JsonResult syncInventory(KdlInventoryQuery query);

    JsonResult syncInventoryDay(KdlInventoryQuery query);
    /**
     * 同步康德乐异常反馈结果
     * @return
     */
    JsonResult syncQffFeedback(QffFeedbackQuery query);
    String getQffMaxSyncTime();

    /**
     * 同步康德乐即运输报表
     * @return
     */
    JsonResult syncTransReport(QffFeedbackQuery query);
    String getTransReportMaxSyncTime();

    /**
     * 同步康德乐养护报表
     * @return
     */
    JsonResult syncMaintainReport(QffFeedbackQuery query);
    String getMaintainReportMaxSyncTime();
    /**
     * 同步康德乐签收结果
     * @return
     */
    JsonResult syncPOD(RGRQuery query);
    String getPODMaxSyncTime();
    /**
     * 同步康德乐拒收记录
     * @return
     */
    JsonResult syncRGR(RGRQuery query);

    JsonResult syncCHG(RGRQuery query);
    String getCHGMaxSyncTime();
    String getRGRMaxSyncTime();
    /**
     * 同步康德乐销毁结果回传
     * @return
     */
    JsonResult syncZBFE(RGRQuery query);
    String getZBFEMaxSyncTime();

    JsonResult getRejectDetail(String orderno);

    /**
     * 获取销毁订单明细
     * @param id 销毁订单id
     * @return
     */
    JsonResult getZBFEDetail(Integer id);


    JsonResult GetConfirmation(String body);

    /**
     * 获取NC采购订单列表
     * @param query
     * @return
     */
    JsonResult getNCPOOrderList(BaseQuery query);

    /**
     * 获取NC采购/销售订单单据类型
     * @param orgcode 组织代码
     * @param bill 采购/销售订单类型
     * @return
     */
    JsonResult getNCBilltypeList(String orgcode,String bill);

    /**
     * 获取NC采购订单明细
     * @param pkOrder 采购订单主键
     * @return
     */
    JsonResult getNCPOOrderDetailList(String pkOrder);

    /**
     * 根据订单号获取质检结果明细
     * @param orderno 采购订单号
     * @return
     */
    JsonResult getPurchaseinInspectionDetail(String orderno);


    /**
     * 获取NC销售订单列表
     * @param query
     * @return
     */
    JsonResult getNCSOOrderList(BaseQuery query);

    /**
     * 获取NC其他出库单列表
     * @param query
     * @return
     */
    JsonResult getNCGeneralOutList(BaseQuery query);

    /**
     * 获取NC其他出库明细
     * @param cgeneralhid 其他出库单主键
     * @return
     */
    JsonResult getNCGeneralOutDetailList(String cgeneralhid);

    /**
     * 获取NC其他入库单列表
     * @param query
     * @return
     */
    JsonResult getNCGeneralInList(BaseQuery query);

    /**
     * 获取NC其他入库明细
     * @param cgeneralhid 其他入库单主键
     * @return
     */
    JsonResult getNCGeneralInDetailList(String cgeneralhid);


    /**
     * 获取NC销售订单明细
     * @param pkOrder 销售订单主键
     * @return
     */
    JsonResult getNCSOOrderDetailList(String pkOrder);

    /**
     * 获取NC可用库存
     * @param query
     * @return
     */
    JsonResult getNCOnHandList(BaseQuery query);

    /**
     * 获取康德乐即时库存
     * @param query
     * @return
     */
    JsonResult getKdlInventory(BaseQuery query);

    /**
     * 获取康德乐异常反馈结果
     * @param query
     * @return
     */
    JsonResult getKdlQffFeedback(BaseQuery query);

    /**
     * 获取康德乐运输报表
     * @param query
     * @return
     */
    JsonResult getKdlTransReport(BaseQuery query);

    /**
     * 获取康德乐养护报表
     * @param query
     * @return
     */
    JsonResult getKdlMaintainReport(BaseQuery query);

    /**
     * 获取康德乐签收结果
     * @param query
     * @return
     */
    JsonResult getKdlPOD(BaseQuery query);


    /**
     * 获取康德乐拒收记录
     * @param query
     * @return
     */
    JsonResult getKdlRGR(BaseQuery query);



    /**
     * 获取康德乐销毁结果回传
     * @param query
     * @return
     */
    JsonResult getKdlZBFE(BaseQuery query);

    /**
     * 回写采购入库 -> NC
     * @param id 采购入库结果主键id
     * @param sendAll true:回写全部状态的入库质检 false:只回写【未回写】状态的入库质检
     * @return
     */
    JsonResult submitInspectToNC(Integer id,boolean sendAll);
    JsonResult submitFeedbackInspectToNC(String orderno);

    /**
     * 回写采退 -> NC
     * @param id 采退结果主键id
     * @return
     */
    JsonResult submitPurchaseReturnToNC(Integer id);

    /**
     * 回写销退 -> NC
     * @param id 销退结果主键id
     * @return
     */
    JsonResult submitSaleReturnToNC(Integer id);

    JsonResult submitFeedbackSaleReturnToNC(String orderno);
    /**
     * 回写移库结果 -> NC
     * @param orderno 移库结果物料凭证号
     * @return
     */
    JsonResult submitWhstransToNC(String orderno);

    /**
     * 退货回写移库结果 -> NC
     * @param orderno 移库结果物料凭证号
     * @param  withT 如果为true 移库是退货，批次号要带T
     * @return
     */
    JsonResult submitWhstransToNCT(String orderno,Boolean withT);

    /**
     * 回写其他出库结果 -> NC
     * @param orderno 其他出库物料凭证号
     * @param updateStatus 是否更新回写涨停
     * @return
     */
    JsonResult submitGeneralOutToNC(String orderno,boolean updateStatus);

    /**
     * 回写其他入库结果 -> NC
     * @param orderno 其他入库物料凭证号
     * @param useToFlag false:使用转换前箱型、箱号及批号；true:使用转换后箱型、箱号及批号
     * @return
     */
    JsonResult submitGeneralInToNC(String orderno,boolean useToFlag);


    JsonResult submitSaleOutToNC(Integer id);

    JsonResult submitSaleOutQCToNC(Integer id);

    JsonResult submitSaleOutQCToNC(String vendorso);

    String[] getBillType(String dictCode);

    /**
     * 获取其他出库单据类型
     * @return
     */
    JsonResult getGeneralOutBillType();

    /**
     * 获取其他入库单据类型
     * @return
     */
    JsonResult getGeneralInBillType();

    /**
     * 下发移库指令 —> 康德乐
     * @param id 移库指令id
     * @return
     */
    JsonResult uploadGoodsmovement(Integer id);

    /**
     * 下发异常处理反馈->康德乐
     * @param id 异常反馈记录id
     * @return
     */
    JsonResult uploadExceptionFeedback(Integer id);

    /**
     * 保存异常反馈处理结果
     * @param entity
     * @return
     */
    JsonResult saveFeedback(KdlQffFeedback entity);


    JsonResult saveTransOperator(KdlTransReport entity);

    JsonResult saveTransVendor(KdlTransDto entity);
    JsonResult saveTransVendorOper(KdlTransVendorOper entity);
    JsonResult saveTransVendorTruck(KdlTransVendorTruck entity);

    /**
     * 下发销毁订单->康德乐
     * @param id 销毁订单记录主键id
     * @return
     */
    JsonResult uploadOutbound(Integer id);

    /**
     * 获取康德乐地区列表
     * @return
     */
    JsonResult getRegionList();

    JsonResult getFtpFile(String remoteFileName,String savePath);
    /**
     * 获取待上传的物料主数据列表
     * @return
     */
    List<KDLMaterial> getMaterialUploadList();
    /**
     * 获取待上传的客户列表
     * @return
     */
    List<KDLCustomer> getCustomerUploadList();

    /**
     * 获取待上传的供应商列表
     * @return
     */
    List<KDLSupplier> getSupplierUploadList();

    /**
     * 获取工厂列表
     * @return
     */
    List<KdlStoredoc> getPlantList();

    /**
     * 获取工厂下的仓库列表
     * @param plant 工厂编号
     * @return
     */
    List<KdlStoredoc> getBincodeList(String plant);

    /**
     * 获取异常反馈待下载附件列表
     * @return
     */
    List<KdlQffAttach> getQffAttachList();

    /**
     * 更新异常反馈附件下载状态
     * @param id
     * @param status
     * @return
     */
    boolean updateDownloadStatus(Integer id,String status);

    /**
     * 根据异常反馈编号获取异常反馈附件
     * @param qffno
     * @return
     */
    JsonResult getFeedbackAttachList(String qffno);

    JsonResult getTransVendorList(BaseQuery query);

    JsonResult getTransVendorOperList(BaseQuery query);
    JsonResult getTransVendorTruckList(BaseQuery query);

    JsonResult getVendorOperListByName(BaseQuery query);
    JsonResult getVendorTruckListByName(BaseQuery query);

    /**
     * 获取客户主数据专管员列表
     * @param masterdataType M:物料 C:客户 V:供应商
     * @return
     */
    JsonResult getQCUserList(String masterdataType);

    JsonResult manualsync(KdlManualSync entity);

    JsonResult getKdlchgList(BaseQuery query);
}
